package com.hlkj.pay.infrastructure.model.pay;

import java.util.List;

import org.springframework.util.StringUtils;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hlkj.framework.common.util.collection.CollectionUtils;
import com.hlkj.framework.common.util.json.JsonUtils;
import com.hlkj.framework.mybatis.core.dataobject.BaseDO;
import com.hlkj.pay.dto.provider.DefaultFeeConfig;
import com.hlkj.pay.dto.provider.SeniorFeeConfig;
import com.hlkj.pay.dto.provider.StepFeeConfig;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
* 服务商支付方式费率配置信息
* @TableName t_provider_channel_fee_config
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("t_provider_channel_fee_config")
public class ProviderChannelFeeConfigDO extends BaseDO {
    /**
    * 服务商编码
    */
    private String providerCode;
    /**
    * 通道编码
    */
    private String channelCode;
    /**
    * 支付方式编码
    */
    private String payWayCode;
    /**
    * 状态 0 关闭 1 启用
    */
    private Integer status;
    /**
    * 是否支持进件 0 不支持 1 支持
    */
    private Integer applyType;
    /**
    * 是否阶梯费率 0 否 1 是
    */
    private Integer stepFeeType;
    private String defaultFeeConfig;
    /**
    * 阶梯费率配置
    */
    private String stepFeeConfig;
    /**
     * 阶梯费率配置
     */
    @TableField(exist = false)
    private List<StepFeeConfig> stepFeeConfigs;
    /**
    * 是否高级配置 0 否 1 是
    */
    private Integer seniorFeeType;
    /**
    * 高级配置
    */
    private String seniorFeeConfig;
    
    /**
     * 高级配置
     */
    @TableField(exist = false)
    private SeniorFeeConfig seniorFeeConfigValue;
    /**
     * 默认费率
     */
    @TableField(exist = false)
    private DefaultFeeConfig defaultFeeConfigValue;
    public SeniorFeeConfig getSeniorFeeConfigValue() {
        if(this.seniorFeeConfigValue!=null){
            return this.seniorFeeConfigValue;
        }
        if(StringUtils.hasText(seniorFeeConfig)){
            setSeniorFeeConfigValue(JsonUtils.parseObject(seniorFeeConfig, SeniorFeeConfig.class));
        }
        
        return this.seniorFeeConfigValue;
    }
    public DefaultFeeConfig getDefaultFeeConfigValue() {
        if(this.defaultFeeConfigValue!=null){
            return this.defaultFeeConfigValue;
        }
        if(StringUtils.hasText(defaultFeeConfig)){
            setDefaultFeeConfigValue(JsonUtils.parseObject(defaultFeeConfig,DefaultFeeConfig.class));
        }
        
        return this.defaultFeeConfigValue;
    }
    public List<StepFeeConfig> getStepFeeConfigs() {
        if(!CollectionUtils.isEmpty(this.stepFeeConfigs)){
            return this.stepFeeConfigs;
        }
        if(StringUtils.hasText(stepFeeConfig)){
            setStepFeeConfigs(JsonUtils.parseArray(stepFeeConfig,StepFeeConfig.class));
        }
        return this.stepFeeConfigs;
    }
}
